[小ネタ] Amazon ELBで使えるSSL自己署名証明書を3ステップで作る
ども、大瀧です。
ELBのSSL Termination、みなさん使っていますか?EC2のSSL処理をオフロードしたり、バーチャルホストを複数ELBで対応したり、便利ですよね。
ただ、"ちょっとSSL Terminationを試してみたい"というときサンプルの証明書を準備する作業は、結構面倒なのではないでしょうか。今回はなるべく手早く、自己署名証明書を作成する方法としてmake-ssl-certコマンド+αの方法をご紹介します。
お決まりの断りですが、SSL自己署名証明書はあくまで動作確認用に用いるべきものですので、HTTPS通信の保護およびWebサーバー認証のためには、然るべき正式なSSL証明書を準備ください。
Step1: Ubuntu VMをVagrantで用意する
まずは、SSL証明書作成用のUbuntu仮想マシンを用意します(キリッ)。「えー、証明書作成のためにわざわざ仮想マシン用意するのかよ?!」と文句が聞こえてきそうですが、Windows用やMac OS X用などいろいろなSSL証明書を扱うツールを試してきた結果、一番シンプルに使えるのはLinux(Ubuntu)のmake-ssl-certコマンドという結論に至りました。Vagrantを使えばとても簡単にUbuntu仮想マシンが扱えるので、この機会にVagrantデビューするのもいいかもしれません(笑)。
Vagrantは、公式Webページからバイナリをダウンロード、インストールします。(VirtualBoxも合わせてインストールしましょう)Mac OS Xであれば、端末を開いて数分でUbuntu仮想マシンを起動、ログインすることができます!途中のvagrant up実行時に仮想マシンイメージ(Box)のダウンロードが実行されるので、太いネットワーク回線に接続し作業することをお奨めします。
Vagrantの入門チュートリアルがちょうどUbuntu仮想マシンを起動しているので、その流れに沿って作業してみます。
macbook:~ ryuta$ mkdir precise # Vagrantの設定ファイルを配置する、任意のディレクトリを作成 macbook:~ ryuta$ cd precise macbook:precise ryuta$ vagrant init precise32 http://files.vagrantup.com/precise32.box # Ubuntu 12.04 LTS 32-bit(普通のUbuntu)を指定 : macbook:precise ryuta$ vagrant up # 初回実行時は仮想マシンイメージをダウンロードして起動、2回目以降はイメージを使い回す Bringing machine 'default' up with 'virtualbox' provider... : Guest Additions Version: 4.2.0 VirtualBox Version: 4.3 [default] Mounting shared folders... [default] -- /vagrant macbook:precise ryuta$ vagrant ssh # いきなりSSH接続!SSH鍵などはVagrantが自動生成してくれます。Cool!! Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686) * Documentation: https://help.ubuntu.com/ Welcome to your Vagrant-built virtual machine. Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2 vagrant@precise32:~$
Ubuntu仮想マシンにログインできました!続いて、make-ssl-certコマンドを含むssl-certパッケージをインストールします。
vagrant@precise32:~$ sudo apt-get install ssl-cert Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: openssl-blacklist The following NEW packages will be installed: ssl-cert 0 upgraded, 1 newly installed, 0 to remove and 156 not upgraded. Need to get 12.3 kB of archives. After this operation, 91.1 kB of additional disk space will be used. Get:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main ssl-cert all 1.0.28ubuntu0.1 [12.3 kB] Fetched 12.3 kB in 0s (28.9 kB/s) Preconfiguring packages ... Selecting previously unselected package ssl-cert. (Reading database ... 29361 files and directories currently installed.) Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ... Processing triggers for man-db ... Setting up ssl-cert (1.0.28ubuntu0.1) ... vagrant@precise32:~$ make-ssl-cert debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied Usage: /usr/sbin/make-ssl-cert template output [--force-overwrite] Usage: /usr/sbin/make-ssl-cert generate-default-snakeoil [--force-overwrite]
これで準備OKです。
Step2: make-ssl-certの実行+α
make-ssl-certコマンドは、自己署名証明書を簡単に作成するコマンドラインツールです。以下のようにHost name(Common Name)を入力するだけでそれ以外はツールが自動でうまいこと見繕い、秘密鍵と証明書を含むpemファイルを作成してくれます!以下の実行例で指定している./cert.pemが、作成する証明書のファイル名です。任意のファイルで、どんどん作ることができます。
vagrant@precise32:~$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf ./cert.pem ┌────────────────────┤ Configure an SSL Certificate. ├─────────────────────┐ │ Please enter the host name to use in the SSL certificate. │ │ │ │ It will become the 'commonName' field of the generated SSL certificate. │ │ │ │ Host name: │ │ │ │ sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com___________________ │ │ │ │ <Ok> <Cancel> │ │ │ └──────────────────────────────────────────────────────────────────────────┘ vagrant@precise32:~$ ls 20154bec cert.pem postinstall.sh vagrant@precise32:~$ sudo cat cert.pem -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC88d+01eujf0lN : (中略) EiPZjALfvnEmIhdFcxtYGguGdCG1sXHaDzY052+jCx70OYtD5XPO2yWlQEvrv3Si sDEkBIU7PDNbRXjX2eoprTd/pg== -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIC/DCCAeQCCQDMFK9wYsijGzANBgkqhkiG9w0BAQUFADBAMT4wPAYDVQQDEzVz : (中略) HktEr/6CwFp3XutubBSXrxQc5wLBr/0m9hNb0SN1qGJdANxPKW6NdeRYkT/+37SK -----END CERTIFICATE----- vagrant@precise32:~$
あっという間にできました!
-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----までの部分を、ELBの証明書アップロード時のPublic Key Certificate欄に貼付けて使います。参考までに証明書の詳細を確認するopenssl x509コマンドの結果を示します。
vagrant@precise32:~$ sudo openssl x509 -in cert.pem -text # 証明書の内容を確認 Certificate: Data: Version: 1 (0x0) Serial Number: cc:14:af:70:62:c8:a3:1b Signature Algorithm: sha1WithRSAEncryption Issuer: CN=sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com Validity Not Before: Feb 10 08:41:46 2014 GMT Not After : Feb 8 08:41:46 2024 GMT Subject: CN=sample-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) : (以下鍵情報) vagrant@precise32:~$
設定したとおりにできていますね!
Step3: 秘密鍵の変換
ここでちょっとしたコツです。make-ssl-certコマンドで作成されるpemファイルにある秘密鍵(Private Key)はRSA形式になっていないため、ELBのアップロード時に以下のようなエラーが出てしまいそのままでは使えません。openssl rsaコマンドで、RSA形式に変換したものを貼付けましょう。
vagrant@precise32:~$ sudo openssl rsa -in cert.pem writing RSA key -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAvPHftNXro39JTcvP8RdYapGRojNd9H68MIrBaIuZwKAe9xjb : (中略) NOdvowse9DmLQ+VzztslpUBL6790orAxJASFOzwzW0V419nqKa03f6Y= -----END RSA PRIVATE KEY-----
こちらをPrivate Key欄に貼付ければ、一丁あがりです!
後片付け
SSL証明書をアップロードしたELBが正常に動作することを確認したら、Ubuntu仮想マシンを片付けましょう。今回作成した証明書が不要であれば、vagrant destroyで仮想マシンごと削除してしまうのがお奨めです。また必要になったらvagrant upを実行し新規仮想マシンを作成します。2回目以降はBoxのダウンロードは省略されるので、ネットワーク通信は発生せず、より早く起動します。Vagrant賢い!
vagrant@precise32:~$ logout Connection to 127.0.0.1 closed. macbook:precise ryuta$ vagrant destroy Are you sure you want to destroy the 'default' VM? [y/N] y [default] Forcing shutdown of VM... [default] Destroying VM and associated drives... macbook:precise ryuta$
まとめ
make-ssl-certコマンドを利用したELB向けSSL自己署名証明書の作成方法をご紹介しました。この方法なら複数ドメインでSSLバーチャルホストの動作検証も苦にならないハズ!
また、Macネイティブでイケてるツールがあれば教えてください!乗り換えを検討します(笑